3. Create DataFrame of NDVI Timeseries

Written by Men Vuthy, 2021


Import modules

[1]:
import rasterio
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import os
import glob

Create DataFrame

[2]:
# Read data
NDVI_Images = rasterio.open('output/1/mosaic_img/NDVI_2011.tif').read()

# Reshape from array to list
NDVI_list = []

for array in NDVI_Images:
    ndvi_by_day = array.reshape(-1)
    NDVI_list.append(ndvi_by_day)

# Create dataframe of timeseries data
NDVI_DataFrame = pd.DataFrame(NDVI_list)

Interpolation to eliminate NaN inside timeseries

[3]:
# Interpolate based on Polynomial
NDVI_DataFrame = NDVI_DataFrame.interpolate(method='polynomial', order=2)
NDVI_DataFrame = NDVI_DataFrame.T
NDVI_DataFrame
[3]:
0 1 2 3 4 5 6 7 8 9 ... 59 60 61 62 63 64 65 66 67 68
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
392308 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
392309 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
392310 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
392311 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
392312 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

392313 rows × 69 columns

Extract date of each image

[4]:
file_path = "input/ndvi_2011"

# Make a search criteria to select the ndvi files
q = os.path.join(file_path, "20*.tif")

# sorted files by name
ndvi_fps = sorted(glob.glob(q))

# List of date of ndvi image
img_date = []
for file in ndvi_fps:
    name = os.path.basename(file)
    name_ver2 = name.replace("_","/")
    name_ver3 = name_ver2.replace(".tif","")
    img_date.append(name_ver3)

print(img_date)
['2010/01/01', '2010/01/17', '2010/02/02', '2010/02/18', '2010/03/06', '2010/03/22', '2010/04/07', '2010/04/23', '2010/05/09', '2010/05/25', '2010/06/10', '2010/06/26', '2010/07/12', '2010/07/28', '2010/08/13', '2010/08/29', '2010/09/14', '2010/09/30', '2010/10/16', '2010/11/01', '2010/11/17', '2010/12/03', '2010/12/19', '2011/01/01', '2011/01/17', '2011/02/02', '2011/02/18', '2011/03/06', '2011/03/22', '2011/04/07', '2011/04/23', '2011/05/09', '2011/05/25', '2011/06/10', '2011/06/26', '2011/07/12', '2011/07/28', '2011/08/13', '2011/08/29', '2011/09/14', '2011/09/30', '2011/10/16', '2011/11/01', '2011/11/17', '2011/12/03', '2011/12/19', '2012/01/01', '2012/01/17', '2012/02/02', '2012/02/18', '2012/03/05', '2012/03/21', '2012/04/06', '2012/04/22', '2012/05/08', '2012/05/24', '2012/06/09', '2012/06/25', '2012/07/11', '2012/07/27', '2012/08/12', '2012/08/28', '2012/09/13', '2012/09/29', '2012/10/15', '2012/10/31', '2012/11/16', '2012/12/02', '2012/12/18']
[5]:
from datetime import datetime

date_frame = pd.DataFrame(img_date)
date_frame

date_img = []
for date in date_frame[0]:
    datetime_object = datetime.strptime(date, '%Y/%m/%d').date()
    date_img.append(datetime_object)

date_img = (date_img)
date_img = [datetime.strftime(i,'%Y/%b/%d') for i in date_img]
NDVI_DataFrame.columns = date_img

# drop rows with nan in all columns
NDVI_DataFrame.dropna(subset = NDVI_DataFrame.columns, inplace=True)

DF_NDVI = NDVI_DataFrame.T
[6]:
# Save Date
date = pd.DataFrame(date_img)
date.to_csv('output/2/date_img/date_img.csv', index=False)

Save result as csv

[7]:
DF_NDVI.to_csv('output/2/timeseries/timeseries_ndvi.csv', index=False)

Visualize data

[8]:
fig, ax = plt.subplots(figsize=(12,5))
ax = DF_NDVI.iloc[:,5000:5001].plot(ax=ax)
ax.set_title('NDVI_2011')
plt.show();
../../../../_images/Content_Project_2021_paddy-area-classification_3._create-timeseries_15_0.png